<script>
/* 
ECMAScript 中两种属性  
    数据属性  四个特性
        [[Configurable]] 可重新定义属性 默认true
        [[Enumberable]]  可for...in枚举   默认true
        [[Writable]]  是否可修改属性的值 默认true
        [[Value]]  读写这个属性的数据值 读写在相同位置  默认undefined

    使用Object.defineProperty(对象，属性名，选项对象)

    访问器属性
        [[Configurable]] 可重新定义属性 默认true
        [[Enumberable]]  可for...in枚举   默认true
        [[Get]]  读取时调用的函数  默认值undefined
        [[Set]]    写入属性时调用的函数 默认值undefined

    getter
        setter

 */
// 数据属性
var person = {};
Object.defineProperty(person,"name",{
    writable:false,
    value:'jack'
})
console.log(person);
console.log(person.name);
person.name="mark"
console.log(person.name);

// Object.defineProperty(person,"name",{
//     writable:true,
//     value:'curry'
// })

// 访问器属性
var book = {
    _year : 2004,
    edition:1
}
// 通过给book对象新加属性year
Object.defineProperty(book,"year",{
    get:function(){
        return this._year;
    },
    set:function(newValue){
        console.log("-------");
        if(newValue>2004){
            this._year=newValue;
            this.edition += newValue -2004;
        }
    }
    
})
book.year=2005;
console.log(book._year);
console.log(book.year);
console.log(book.edition);





</script>